package com.bms.controller.xybank;


import com.bms.common.response.CategoryResponse;
import com.bms.common.response.Result;
import com.bms.entity.BookType;
import com.bms.entity.Budget;
import com.bms.entity.Category;
import com.bms.service.CategoryService;
import com.bms.utils.MyResult;
import com.bms.utils.MyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 控制器层，处理HTTP请求并调用服务层方法。
 */
@RestController
@RequestMapping("/category")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    /**
     * 获取类别数量
     *
     * @return 返回类别数量的结果对象
     */
    @GetMapping(value = "/getCount")
    public Result getCount(){
        Integer count = categoryService.getCount();
        return Result.success(count);
    }

    /**
     * 添加类别
     *
     * @param category 新增的类别对象
     * @return 返回添加类别操作的结果对象
     */
    @PostMapping("/addCategory")
    public Result addCategory(@RequestBody Category category) {
        return Result.success(categoryService.addCategory(category));
    }

    /**
     * 分页查询类别
     *
     * @param params 包含查询和分页参数的Map对象
     * @return 返回包含查询结果和分页信息的Map对象
     */
    @GetMapping(value = {"/queryCategoriesByPage", "reader/queryCategoriesByPage"})
    public Map<String, Object> queryCategoriesByPage(@RequestParam Map<String, Object> params){
        MyUtils.parsePageParams(params);
        int count = categoryService.getSearchCount(params);
        List<CategoryResponse> categoryList = categoryService.searchCategoriesByPage(params);
        return MyResult.getListResultMap(0, "success", count, categoryList);
    }

    /**
     * 更新类别信息
     *
     * @param category 更新后的类别对象
     * @return 返回更新操作影响的行数结果对象
     */
    @PutMapping(value = "/updateCategory")
    public Result updateCategory(@RequestBody Category category){
        Integer count = categoryService.updateCategory(category);
        return Result.success(count);
    }

    /**
     * 更新类别的状态
     *
     * @param category 包含更新后状态的类别对象
     * @return 返回状态更新操作的结果对象
     */
    @PutMapping(value = "/updateStatus")
    public Result updateStatus(@RequestBody Category category){
        Integer res = categoryService.updateStatus(category);
        return Result.success(res);
    }

    /**
     * 获取类别选择列表
     * 通过GET请求获取指定线路的类别选择列表，以供用户选择
     *
     * @param budgetId 线路ID，用于指定查询的线路
     * @return 返回类别列表的查询结果
     */
    @GetMapping(value = "/getCategorySelectList")
    public Result getCategorySelectList(@RequestParam String budgetId){
        // 调用服务层方法获取类别选择列表
        List<Category> list = categoryService.getCategorySelectList(budgetId);
        // 返回成功结果，包含类别列表
        return Result.success(list);
    }
}
